package models

import (
	"go_server/conf"
	"go_server/databases/mongoc"

	"time"

	"go.mongodb.org/mongo-driver/bson/primitive"
	"go.mongodb.org/mongo-driver/mongo"
)

func coll(TalbeName string) *mongo.Collection {
	return mongoc.MongoClient().Database(conf.ConfigInfo.Mongo.Database).Collection(TalbeName)
}

// 车辆信息 model
type VehicleInformation struct {
	ID                      primitive.ObjectID      `bson:"_id,omitempty" json:"id"`
	State                   string                  `bson:"state" json:"state"`                                     // 档案状态 forbid 不通过 approve 通过 unaudited 未审核  del 删除
	CreatedTime             time.Time               `bson:"createdTime" json:"createdTime"`                         // 创建时间
	Creator                 string                  `bson:"creator" json:"creator"`                                 // 创建人
	UpdateTime              time.Time               `bson:"updateTime" json:"updateTime"`                           // 更新时间
	Updater                 string                  `bson:"updater" json:"updater"`                                 // 更新人
	VehicleBasicInformation VehicleBasicInformation `bson:"vehicleBasicInformation" json:"vehicleBasicInformation"` // 基础信息
	VehicleBodyParameter    VehicleBodyParameter    `bson:"vehicleBodyParameter" json:"vehicleBodyParameter"`       // 车身参数
	VehicleEngine           VehicleEngine           `bson:"vehicleEngine" json:"vehicleEngine"`                     // 发动机参数
	VehicleOtherInformation VehicleOtherInformation `bson:"vehicleOtherInformation" json:"vehicleOtherInformation"` // 其他信息

}

// 车辆基础信息
type VehicleBasicInformation struct {
	LicensePlateNumber          string          `bson:"licensePlateNumber" json:"licensePlateNumber"`                   // 车牌号
	AffiliatedCompany           string          `bson:"affiliatedCompany" json:"affiliatedCompany"`                     // 所属公司
	CustomizeNumber             string          `bson:"customizeNumber" json:"customizeNumber"`                         // 自编号
	VehicleType                 string          `bson:"vehicleType" json:"vehicleType"`                                 // 车型
	DomesticORImported          string          `bson:"domesticORImported" json:"domesticORImported"`                   // 国产/进口
	VehicleIdentificationNumber string          `bson:"vehicleIdentificationNumber" json:"vehicleIdentificationNumber"` // 车架号(VIN)
	VehicleManufacturer         string          `bson:"vehiclemanufacturer" json:"vehiclemanufacturer"`                 // 车辆厂商
	LicensePlateType            string          `bson:"licensePlateType" json:"licensePlateType"`                       // 车牌型号
	OperationCertificateNumber  string          `bson:"operationCertificateNumber" json:"operationCertificateNumber"`   // 运营证号
	PurchaseCertificateNumber   string          `bson:"purchaseCertificateNumber" json:"purchaseCertificateNumber"`     // 购置证号
	RegistrationNumber          string          `bson:"registrationNumber" json:"registrationNumber"`                   // 登记证号
	BodyColor                   string          `bson:"bodyColor" json:"bodyColor"`                                     // 车身颜色
	ChassisNumber               string          `bson:"chassisNumber" json:"chassisNumber"`                             // 底盘号
	AirConditioningNumber       string          `bson:"airConditioningNumber" json:"airConditioningNumber"`             // 空调号
	WaveBoxSeriesNumber         string          `bson:"waveBoxSeriesNumber" json:"waveBoxSeriesNumber"`                 // 波箱系列号
	DateOfRegistration          time.Time       `bson:"dateOfRegistration" json:"dateOfRegistration"`                   // 登记日期
	DateOfIssue                 time.Time       `bson:"dateOfIssue" json:"dateOfIssue"`                                 // 发证日期
	DateOfInvoiceForPurchase    time.Time       `bson:"dateOfInvoiceForPurchase" json:"dateOfInvoiceForPurchase"`       // 购入开票日期
	StartDate                   time.Time       `bson:"startDate" json:"startDate"`                                     // 启用日期
	ServiceLife                 uint            `bson:"serviceLife" json:"serviceLife"`                                 // 使用年限
	ApprovedNumberOfPassengers  uint            `bson:"approvedNumberOfPassengers" json:"approvedNumberOfPassengers"`   // 核定乘员数（人）
	SeatNumber                  uint            `bson:"seatNumber" json:"seatNumber"`                                   // 座位数
	TypeOfBusiness              string          `bson:"typeOfBusiness" json:"typeOfBusiness"`                           // 业务类型
	AirConditionedCar           bool            `bson:"airConditionedCar" json:"airConditionedCar"`                     // 是否空调车
	OperatingCondition          string          `bson:"operatingCondition" json:"operatingCondition"`                   // 营运状态
	ChangeOperatingCondition    time.Time       `bson:"changeOperatingCondition" json:"changeOperatingCondition"`       // 营运状态变更
	PurchaseStatus              string          `bson:"purchaseStatus" json:"purchaseStatus"`                           // 购置状态
	ChangePurchaseStatus        time.Time       `bson:"changePurchaseStatus" json:"changePurchaseStatus"`               // 购置状态变更
	ExampleCheckEnableDate      time.Time       `bson:"exampleCheckEnableDate" json:"exampleCheckEnableDate"`           // 例检启用日期
	VehicleClass                string          `bson:"vehicleClass" json:"vehicleClass"`                               // 车辆等级
	NewEnergy                   bool            `bson:"newEnergy" json:"newEnergy"`                                     // 是否新能源车
	ThreePackMileage            uint            `bson:"threePackMileage" json:"threePackMileage"`                       // 整车三包里程
	ThreePackDuration           uint            `bson:"threePackDuration" json:"threePackDuration"`                     // 整车三包时长(月)
	ContractRepairingMileage    uint            `bson:"contractRepairingMileage" json:"contractRepairingMileage"`       // 整车包修里程
	ContractRepairingDuration   uint            `bson:"contractRepairingDuration" json:"contractRepairingDuration"`     // 整车包修时长(月)
	Remarks                     string          `bson:"remarks" json:"remarks"`                                         // 备注
	VehicleDocument             VehicleDocument `bson:"vehicleDocument" json:"vehicleDocument"`                         // 车辆证件
}

// 车辆证件
type VehicleDocument struct {
	VehiclePhoto              string `bson:"vehiclePhoto" json:"vehiclePhoto"`                           // 车辆照片
	DriverLicenseHomepage     string `bson:"driverLicenseHomepage" json:"driverLicenseHomepage"`         // 行驶证正页
	DriverLicenseReversePage  string `bson:"driverLicenseReversePage" json:"driverLicenseReversePage"`   // 行驶证副页
	OperationCertificatePhoto string `bson:"operationCertificatePhoto" json:"operationCertificatePhoto"` // 运营证照片
}

// 车身参数
type VehicleBodyParameter struct {
	TotalLoadWeight      uint `bson:"totalLoadWeight" json:"totalLoadWeight"`           // 满载总质量 kg
	QualityMaintenance   uint `bson:"qualityMaintenance" json:"qualityMaintenance"`     // 整备质量 kg
	ApprovedLoadMass     uint `bson:"approvedLoadMass" json:"approvedLoadMass"`         // 核定载质量 kg
	OutlineLength        uint `bson:"outlineLength" json:"outlineLength"`               // 外廓长度 mm
	OuterWidth           uint `bson:"outerWidth" json:"outerWidth"`                     // 外廓宽度 mm
	ProfileHeight        uint `bson:"profileHeight" json:"profileHeight"`               // 外廓高度 mm
	BenchmarkingPlatform uint `bson:"benchmarkingPlatform" json:"benchmarkingPlatform"` // 标台
	FrontWheelPitch      uint `bson:"frontWheelPitch" json:"frontWheelPitch"`           // 前轮距 mm
	RearWheelPitch       uint `bson:"rearWheelPitch" json:"rearWheelPitch"`             // 后轮距 mm
	Wheelbase            uint `bson:"wheelbase" json:"wheelbase"`                       // 轴距 mm
	AxleNumber           uint `bson:"axleNumber" json:"axleNumber"`                     // 车轴数
	LeafSpringNumber     uint `bson:"leafSpringNumber" json:"leafSpringNumber"`         // 钢板弹簧数
	TiresNumber          uint `bson:"tiresNumber" json:"tiresNumber"`                   // 轮胎数
	DoubleLayer          bool `bson:"doubleLayer" json:"doubleLayer"`                   // 是否双层
}

// 发动机参数
type VehicleEngine struct {
	EngineNumber       string `bson:"engineNumber" json:"engineNumber"`             // 发动机号
	EngineType         string `bson:"engineType" json:"engineType"`                 // 发动机型号
	FuelType           string `bson:"fuelType" json:"fuelType"`                     // 燃油类型
	EngineDisplacement uint   `bson:"engineDisplacement" json:"engineDisplacement"` // 发动机排量 L
	EmissionStandard   string `bson:"emissionStandard" json:"emissionStandard"`     // 排放标准
	EnginePower        uint   `bson:"enginePower" json:"enginePower"`               // 发动机功率 KW
	RatedTorqueSpeed   uint   `bson:"ratedTorqueSpeed" json:"ratedTorqueSpeed"`     // 额定扭矩转速 r/min
	EngineTorque       uint   `bson:"engineTorque" json:"engineTorque"`             // 发动机扭矩 NM
}

// 其他信息
type VehicleOtherInformation struct {
	LicensePlateColor      string    `bson:"licensePlateColor" json:"licensePlateColor"`           // 车牌颜色
	TransportationIndustry string    `bson:"transportationIndustry" json:"transportationIndustry"` // 运输行业
	OperationType          string    `bson:"operationType" json:"operationType"`                   // 运营类型
	OwnerID                string    `bson:"ownerID" json:"ownerID"`                               // 业户ID
	OwnerName              string    `bson:"ownerName" json:"ownerName"`                           // 业户名称
	OwnerTelephone         string    `bson:"ownerTelephone" json:"ownerTelephone"`                 // 业户联系电话
	CarTerminalTelephone   string    `bson:"carTerminalTelephone" json:"carTerminalTelephone"`     // 车载终端电话
	OwnerGender            string    `bson:"ownerGender" json:"ownerGender"`                       // 车主性别
	IdentityCardNumber     string    `bson:"identityCardNumber" json:"identityCardNumber"`         // 身份证号码
	MailingSddress         string    `bson:"mailingSddress" json:"mailingSddress"`                 // 通讯地址
	TonnageOrSeat          string    `bson:"tonnageOrSeat" json:"tonnageOrSeat"`                   // 吨位/座位
	DriverName             string    `bson:"driverName" json:"driverName"`                         // 驾驶员一名称
	DriverTelephone        string    `bson:"driverTelephone" json:"driverTelephone"`               // 驾驶员一电话
	DriverTwoName          string    `bson:"driverTwoName" json:"driverTwoName"`                   // 驾驶员二名称
	DriverTwoTelephone     string    `bson:"driverTwoTelephone" json:"driverTwoTelephone"`         // 驾驶员二电话
	OperatingRoute         string    `bson:"operatingRoute" json:"operatingRoute"`                 // 运营路线
	CarRegistrationCode    string    `bson:"carRegistrationCode" json:"carRegistrationCode"`       // 车籍地代码
	ServiceStartTime       time.Time `bson:"serviceStartTime" json:"serviceStartTime"`             // 服务开始时间
	ServiceEndTime         time.Time `bson:"serviceEndTime" json:"serviceEndTime"`                 // 服务结束时间
	SupportPhotoTaking     bool      `bson:"supportPhotoTaking" json:"supportPhotoTaking"`         // 支持拍照
	VehicleFileAttachment  string    `bson:"vehicleFileAttachment" json:"vehicleFileAttachment"`   // 车辆档案附件
}

func (v VehicleInformation) TableName() string {
	return "vehicleInformation"
}
